System.Collections.Generic.HashSet<T> 類別

本文提供此 API 參考文件的補充備註。

類別 HashSet<T> 提供高效能集合作業。 集合是一個集合,其中包含沒有重複的專案,且其項目沒有特定順序。

物件的容量 HashSet<T> 是物件可以保存的項目數目。 當 HashSet<T> 專案加入至 物件時,物件的容量會自動增加。

類別HashSet<T>是以數學集合的模型為基礎,並提供類似於存取 或 Hashtable 集合索引鍵的Dictionary<TKey,TValue>高效能集合作業。 簡單來說,類別 HashSet<T> 可以視為 Dictionary<TKey,TValue> 不含值的集合。

HashSet<T>集合未排序,而且不能包含重複的專案。 如果順序或元素重複比應用程式的效能更重要,請考慮搭配 Sort 方法使用 List<T> 類別。

HashSet<T> 提供許多數學集合運算,例如集合加法(等位)和集合減法。 下表列出提供的 HashSet<T> 作業及其數學對等專案。

HashSet 作業 數學對等專案
UnionWith 聯集或設定加法
IntersectWith 交叉口
ExceptWith 設定減法
SymmetricExceptWith 對稱差異

除了列出的集合作業之外,類別 HashSet<T> 也會提供方法來判斷集合是否相等、集合重疊,以及集合是否為另一組的子集或超集。

僅限 .NET Framework:對於非常大HashSet<T>的物件,您可以將組態元素的 <gcAllowVeryLargeObjects> 屬性設定enabledtrue在運行時間環境中,將 64 位系統上的最大容量增加到 20 億個元素。

HashSet<T> 類別會實作 ISet<T> 介面。

HashSet 和 LINQ set 作業

LINQ 提供對實作 或 IQueryable 介面之任何數據源IEnumerableDistinctUnionIntersectExcept 設定作業的存取權。 HashSet<T> 提供較大型且更健全的集合集合作業。 例如,HashSet<T>提供和 IsSupersetOfIsSubsetOf比較。

LINQ set 作業和 HashSet<T> 作業之間的主要差異在於 LINQ set 作業一律會傳回新的 IEnumerable<T> 集合,而 HashSet<T> 對等方法則修改目前的集合。

一般而言,如果您必須建立新的集合,或者如果您的應用程式只需要存取提供的集合作業,則在任何 IEnumerable<T> 集合或陣列上使用LINQ set作業就已足夠。 不過,如果您的應用程式需要存取其他集合作業,或不需要建立新的集合,請使用 類別 HashSet<T>

下表顯示 HashSet<T> 作業及其相等的LINQ集合作業。

HashSet 作業 LINQ 對等專案
UnionWith Union
IntersectWith Intersect
ExceptWith Except
未提供。 Distinct
SymmetricExceptWith 未提供。
Overlaps 未提供。
IsSubsetOf 未提供。
IsProperSubsetOf 未提供。
IsSupersetOf 未提供。
IsProperSupersetOf 未提供。
SetEquals 未提供。